/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import java.io.Serializable;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author jeferson
 */
public class Aluno implements Serializable{

    private HashMap<String, Nota> notas = new HashMap<String, Nota>();
    private String nome;
    private Turma turma;
    private int num;
    private boolean ativo = true;
    private boolean aprovado = false;
    private boolean rec1s = true;
    private boolean rec2s = true;
    private boolean recf = true;

    private static final long serialVersionUID = 1L;

    /*public float[] getProvas() {
        return provas;
    }*/
    
    /** 
     * "prova" deve ser: N1, N2, M1, R1, M1S, N3, N4, M2, R2, M2S, MP, RF, MF
     * @param prova
     * @return 
     */
    public Nota getNota(String prova){
        return notas.get(prova);
    }
    
    public String getNotaInString(String prova){
        Nota n = notas.get(prova);
        if(n!=null)
            return n.getNotaInString();
        return "";
    }
    
    public void setNota(String prova, float valor) throws IlegalNotaException{
        Nota n = new Nota(valor);
        notas.put(prova, n);
        atualizarValores();
    }
    
    public void setNota(String prova, Nota n){
        notas.put(prova, n);
        atualizarValores();
    }
    
    private void atualizarValores() {
        notas.put("M1", Nota.media(notas.get("N1"), notas.get("N2")));
        notas.put("M1S", Nota.mediaMaior(notas.get("M1"), notas.get("R1")));
        notas.put("M2", Nota.media(notas.get("N3"), notas.get("N4")));
        notas.put("M2S", Nota.mediaMaior(notas.get("M2"), notas.get("R2")));
        notas.put("MP", Nota.media(notas.get("M1S"), notas.get("M2S")));
        notas.put("MF", Nota.mediaMaior(notas.get("MP"), notas.get("RF")));
        if(notas.get("MF").maiorQueMedia())
            aprovado = true;
        else
            aprovado = false;
        if(notas.get("M1")!=null && notas.get("M1").maiorQueMedia())
            rec1s = false;
        else
            rec1s = true;
        if(notas.get("M2")!=null && notas.get("M2").maiorQueMedia())
            rec2s = false;
        else
            rec2s = true;
        if(notas.get("MP")!=null && notas.get("MP").maiorQueMedia())
            recf = false;
        else
            recf = true;
    }

    public Aluno(int num, String nome, Turma turma) {
        this.nome = nome.toUpperCase();
        this.turma = turma;
        this.num = num;
    }

    public boolean isAprovado(){
        return aprovado;
    }
    
    public boolean isRec1S(){
        return rec1s;
    }
    
    public boolean isRec2S(){
        return rec2s;
    }
    
    public boolean isRecF(){
        return recf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {
        this.turma = turma;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void ativar() {
        this.ativo = true;
    }
    
    public void desativar() {
        this.ativo = false;
    }

  /*  private Nota media(Nota n1, Nota n2){
        try {
            if(n1==null)
                if(n2==null)
                    return null;
                else
                    return n2;
            else
                if(n2==null)
                    return n1;
            
            float f = (n1.getValor() + n2.getValor())/2;
            Nota result = new Nota(f);
            return result;
        } catch (IlegalNotaException ex) {
            Logger.getLogger(Aluno.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }*/

}
